You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
vulkan_ffv1: fix reset shader dependencies
Without a barrier upfront, the reset shader may read data fields not yet set by the setup shader.
This commit is contained in:
@ -375,31 +375,29 @@ static int vk_ffv1_end_frame(AVCodecContext *avctx)
|
||||
fp->tmp_data = NULL;
|
||||
|
||||
/* Entry barrier for the slice state */
|
||||
if (!(f->picture.f->flags & AV_FRAME_FLAG_KEY)) {
|
||||
buf_bar[nb_buf_bar++] = (VkBufferMemoryBarrier2) {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
|
||||
.srcStageMask = slice_state->stage,
|
||||
.dstStageMask = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
|
||||
.srcAccessMask = slice_state->access,
|
||||
.dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
|
||||
.dstAccessMask = VK_ACCESS_2_SHADER_STORAGE_READ_BIT |
|
||||
VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
|
||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||
.buffer = slice_state->buf,
|
||||
.offset = 0,
|
||||
.size = VK_WHOLE_SIZE,
|
||||
.size = fp->slice_data_size*f->slice_count,
|
||||
};
|
||||
}
|
||||
|
||||
vk->CmdPipelineBarrier2(exec->buf, &(VkDependencyInfo) {
|
||||
.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
|
||||
.pBufferMemoryBarriers = buf_bar,
|
||||
.bufferMemoryBarrierCount = nb_buf_bar,
|
||||
});
|
||||
if (nb_buf_bar) {
|
||||
slice_state->stage = buf_bar[1].dstStageMask;
|
||||
slice_state->access = buf_bar[1].dstAccessMask;
|
||||
slice_state->stage = buf_bar[0].dstStageMask;
|
||||
slice_state->access = buf_bar[0].dstAccessMask;
|
||||
nb_buf_bar = 0;
|
||||
}
|
||||
nb_img_bar = 0;
|
||||
|
||||
/* Setup shader */
|
||||
ff_vk_shader_update_desc_buffer(&ctx->s, exec, &fv->setup,
|
||||
|
Reference in New Issue
Block a user