anv: rename anv_create_companion_rcs_command_buffer to anv_cmd_buffer_ensure_rcs_companion

We can now drop any checks for companion_rcs_cmd_buffer before calling
anv_create_companion_rcs_command_buffer.

Ensure that anv_cmd_buffer_ensure_rcs_companion callee's have the proper
error handling.

Signed-off-by: Rohan Garg <rohan.garg@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26648>
This commit is contained in:
Rohan Garg 2023-12-12 11:54:28 +01:00 committed by Marge Bot
parent bed1b8b90d
commit 40c6e54ce7
4 changed files with 39 additions and 36 deletions

View file

@ -377,21 +377,24 @@ record_main_rcs_cmd_buffer_done(struct anv_cmd_buffer *cmd_buffer)
{
const struct intel_device_info *info = cmd_buffer->device->info;
if (cmd_buffer->companion_rcs_cmd_buffer == NULL) {
anv_create_companion_rcs_command_buffer(cmd_buffer);
/* Re-emit the aux table register in every command buffer. This way we're
* ensured that we have the table even if this command buffer doesn't
* initialize any images.
*/
if (cmd_buffer->device->info->has_aux_map) {
assert(cmd_buffer->companion_rcs_cmd_buffer != NULL);
anv_add_pending_pipe_bits(cmd_buffer->companion_rcs_cmd_buffer,
ANV_PIPE_AUX_TABLE_INVALIDATE_BIT,
"new cmd buffer with aux-tt");
}
const VkResult result = anv_cmd_buffer_ensure_rcs_companion(cmd_buffer);
if (result != VK_SUCCESS) {
anv_batch_set_error(&cmd_buffer->batch, result);
return ANV_STATE_NULL;
}
assert(cmd_buffer->companion_rcs_cmd_buffer != NULL);
/* Re-emit the aux table register in every command buffer. This way we're
* ensured that we have the table even if this command buffer doesn't
* initialize any images.
*/
if (cmd_buffer->device->info->has_aux_map) {
anv_add_pending_pipe_bits(cmd_buffer->companion_rcs_cmd_buffer,
ANV_PIPE_AUX_TABLE_INVALIDATE_BIT,
"new cmd buffer with aux-tt");
}
return anv_genX(info, cmd_buffer_begin_companion_rcs_syncpoint)(cmd_buffer);
}

View file

@ -85,29 +85,30 @@ anv_cmd_state_reset(struct anv_cmd_buffer *cmd_buffer)
}
VkResult
anv_create_companion_rcs_command_buffer(struct anv_cmd_buffer *cmd_buffer)
anv_cmd_buffer_ensure_rcs_companion(struct anv_cmd_buffer *cmd_buffer)
{
if (cmd_buffer->companion_rcs_cmd_buffer)
return VK_SUCCESS;
VkResult result = VK_SUCCESS;
pthread_mutex_lock(&cmd_buffer->device->mutex);
if (cmd_buffer->companion_rcs_cmd_buffer == NULL) {
VK_FROM_HANDLE(vk_command_pool, pool,
cmd_buffer->device->companion_rcs_cmd_pool);
assert(pool != NULL);
VK_FROM_HANDLE(vk_command_pool, pool,
cmd_buffer->device->companion_rcs_cmd_pool);
assert(pool != NULL);
struct vk_command_buffer *tmp_cmd_buffer = NULL;
result = pool->command_buffer_ops->create(pool, &tmp_cmd_buffer);
if (result != VK_SUCCESS) {
pthread_mutex_unlock(&cmd_buffer->device->mutex);
return result;
}
struct vk_command_buffer *tmp_cmd_buffer = NULL;
result = pool->command_buffer_ops->create(pool, &tmp_cmd_buffer);
cmd_buffer->companion_rcs_cmd_buffer =
container_of(tmp_cmd_buffer, struct anv_cmd_buffer, vk);
cmd_buffer->companion_rcs_cmd_buffer->vk.level = cmd_buffer->vk.level;
cmd_buffer->companion_rcs_cmd_buffer->is_companion_rcs_cmd_buffer = true;
}
if (result != VK_SUCCESS)
goto unlock_and_return;
cmd_buffer->companion_rcs_cmd_buffer =
container_of(tmp_cmd_buffer, struct anv_cmd_buffer, vk);
cmd_buffer->companion_rcs_cmd_buffer->vk.level = cmd_buffer->vk.level;
cmd_buffer->companion_rcs_cmd_buffer->is_companion_rcs_cmd_buffer = true;
unlock_and_return:
pthread_mutex_unlock(&cmd_buffer->device->mutex);
return result;
}

View file

@ -5334,7 +5334,7 @@ anv_cmd_buffer_fill_area(struct anv_cmd_buffer *cmd_buffer,
uint32_t data);
VkResult
anv_create_companion_rcs_command_buffer(struct anv_cmd_buffer *cmd_buffer);
anv_cmd_buffer_ensure_rcs_companion(struct anv_cmd_buffer *cmd_buffer);
bool
anv_can_hiz_clear_ds_view(struct anv_device *device,

View file

@ -3714,13 +3714,12 @@ genX(CmdExecuteCommands)(
* command buffer for execution if secondary RCS is valid.
*/
if (secondary->companion_rcs_cmd_buffer != NULL) {
if (container->companion_rcs_cmd_buffer == NULL) {
VkResult result = anv_create_companion_rcs_command_buffer(container);
if (result != VK_SUCCESS) {
anv_batch_set_error(&container->batch, result);
return;
}
VkResult result = anv_cmd_buffer_ensure_rcs_companion(container);
if (result != VK_SUCCESS) {
anv_batch_set_error(&container->batch, result);
return;
}
anv_cmd_buffer_add_secondary(container->companion_rcs_cmd_buffer,
secondary->companion_rcs_cmd_buffer);
}