goto fail;
}
- uint32_t ring_seqno;
- VkResult result = vn_instance_ring_submit_locked(
- instance, &submit->command, submit->reply_shmem, &ring_seqno);
+ submit->ring_seqno_valid =
+ VK_SUCCESS == vn_instance_ring_submit_locked(instance, &submit->command,
+ submit->reply_shmem,
+ &submit->ring_seqno);
mtx_unlock(&instance->ring.mutex);
- submit->reply = VN_CS_DECODER_INITIALIZER(reply_ptr, submit->reply_size);
+ if (submit->reply_size) {
+ submit->reply =
+ VN_CS_DECODER_INITIALIZER(reply_ptr, submit->reply_size);
- if (submit->reply_size && result == VK_SUCCESS)
- vn_ring_wait(&instance->ring.ring, ring_seqno);
+ if (submit->ring_seqno_valid)
+ vn_ring_wait(&instance->ring.ring, submit->ring_seqno);
+ }
return;
return vn_error(dev->instance, result);
}
} else {
+ struct vn_instance_submit_command instance_submit;
if (submit->batch_type == VK_STRUCTURE_TYPE_SUBMIT_INFO_2) {
- vn_async_vkQueueSubmit2(instance, submit->queue_handle,
- submit->batch_count, submit->submit_batches2,
- submit->fence_handle);
+ vn_submit_vkQueueSubmit2(
+ instance, 0, submit->queue_handle, submit->batch_count,
+ submit->submit_batches2, submit->fence_handle, &instance_submit);
} else {
- vn_async_vkQueueSubmit(instance, submit->queue_handle,
- submit->batch_count, submit->submit_batches,
- submit->fence_handle);
+ vn_submit_vkQueueSubmit(instance, 0, submit->queue_handle,
+ submit->batch_count, submit->submit_batches,
+ submit->fence_handle, &instance_submit);
+ }
+ if (!instance_submit.ring_seqno_valid) {
+ vn_queue_submission_cleanup(submit);
+ return vn_error(dev->instance, VK_ERROR_DEVICE_LOST);
}
}