mirror of https://git.ffmpeg.org/ffmpeg.git
hwcontext_vulkan: don't change properties if prepare_frame fails
This commit is contained in:
parent
32fc36ee61
commit
94e17a63a4
|
@ -2200,16 +2200,13 @@ static int prepare_frame(AVHWFramesContext *hwfc, VulkanExecCtx *ectx,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Change the image layout to something more optimal for writes.
|
|
||||||
* This also signals the newly created semaphore, making it usable
|
|
||||||
* for synchronization */
|
|
||||||
for (int i = 0; i < nb_images; i++) {
|
for (int i = 0; i < nb_images; i++) {
|
||||||
img_bar[i] = (VkImageMemoryBarrier2) {
|
img_bar[i] = (VkImageMemoryBarrier2) {
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2,
|
||||||
.pNext = NULL,
|
.pNext = NULL,
|
||||||
.srcStageMask = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT,
|
.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
|
||||||
.srcAccessMask = 0x0,
|
.dstStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
||||||
.dstStageMask = VK_PIPELINE_STAGE_TRANSFER_BIT,
|
.srcAccessMask = frame->access[i],
|
||||||
.dstAccessMask = new_access,
|
.dstAccessMask = new_access,
|
||||||
.oldLayout = frame->layout[i],
|
.oldLayout = frame->layout[i],
|
||||||
.newLayout = new_layout,
|
.newLayout = new_layout,
|
||||||
|
@ -2222,9 +2219,6 @@ static int prepare_frame(AVHWFramesContext *hwfc, VulkanExecCtx *ectx,
|
||||||
.levelCount = 1,
|
.levelCount = 1,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
frame->layout[i] = img_bar[i].newLayout;
|
|
||||||
frame->access[i] = img_bar[i].dstAccessMask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vk->CmdPipelineBarrier2(get_buf_exec_ctx(hwfc, ectx), &(VkDependencyInfo) {
|
vk->CmdPipelineBarrier2(get_buf_exec_ctx(hwfc, ectx), &(VkDependencyInfo) {
|
||||||
|
@ -2234,6 +2228,13 @@ static int prepare_frame(AVHWFramesContext *hwfc, VulkanExecCtx *ectx,
|
||||||
});
|
});
|
||||||
|
|
||||||
err = submit_exec_ctx(hwfc, ectx, &s_info, frame, 0);
|
err = submit_exec_ctx(hwfc, ectx, &s_info, frame, 0);
|
||||||
|
if (err >= 0) {
|
||||||
|
for (int i = 0; i < nb_images; i++) {
|
||||||
|
frame->layout[i] = img_bar[i].newLayout;
|
||||||
|
frame->access[i] = img_bar[i].dstAccessMask;
|
||||||
|
frame->queue_family[i] = img_bar[i].dstQueueFamilyIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
vkfc->unlock_frame(hwfc, frame);
|
vkfc->unlock_frame(hwfc, frame);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Reference in New Issue