History

vulkan_ffv1: fallback to upload if mapping packet fails, fix fallback

The commit which added support for host mapping accidentally broke the original, upload route. For drivers without host-mapping (very few), fix it.

Lynne committed 1 year ago

Commit b72ada01 parent 45d7abf1 file · +7 −12Browse files

Unified · Split

libavcodec/vulkan_ffv1.c+7−12
@@ -182,14 +182,11 @@ static int vk_ffv1_start_frame(AVCodecContext *avctx, · 181 unmodified lines
182 fp->crc_checked = f->ec && (avctx->err_recognition & AV_EF_CRCCHECK);182 fp->crc_checked = f->ec && (avctx->err_recognition & AV_EF_CRCCHECK);
183 183
184 /* Host map the input slices data if supported */184 /* Host map the input slices data if supported */
185 if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY) {185 if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY)
186 err = ff_vk_host_map_buffer(&ctx->s, &vp->slices_buf, buffer_ref->data,186 ff_vk_host_map_buffer(&ctx->s, &vp->slices_buf, buffer_ref->data,
187 buffer_ref,187 buffer_ref,
188 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |188 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
189 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);189 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT);
190 if (err < 0)
191 return err;
192 }
193 190
194 /* Allocate slice state data */191 /* Allocate slice state data */
195 if (f->picture.f->flags & AV_FRAME_FLAG_KEY) {192 if (f->picture.f->flags & AV_FRAME_FLAG_KEY) {
@@ -266,16 +263,14 @@ static int vk_ffv1_decode_slice(AVCodecContext *avctx, · 70 unmodified lines
266 uint32_t size)263 uint32_t size)
267{264{
268 FFV1Context *f = avctx->priv_data;265 FFV1Context *f = avctx->priv_data;
269 FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data;
270 FFVulkanDecodeShared *ctx = dec->shared_ctx;
271 266
272 FFv1VulkanDecodePicture *fp = f->hwaccel_picture_private;267 FFv1VulkanDecodePicture *fp = f->hwaccel_picture_private;
273 FFVulkanDecodePicture *vp = &fp->vp;268 FFVulkanDecodePicture *vp = &fp->vp;
274 269
275 FFVkBuffer *slice_offset = (FFVkBuffer *)fp->slice_offset_buf->data;270 FFVkBuffer *slice_offset = (FFVkBuffer *)fp->slice_offset_buf->data;
271 FFVkBuffer *slices_buf = vp->slices_buf ? (FFVkBuffer *)vp->slices_buf->data : NULL;
276 272
277 if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY) {273 if (slices_buf && slices_buf->host_ref) {
278 FFVkBuffer *slices_buf = (FFVkBuffer *)vp->slices_buf->data;
279 AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 0)*sizeof(uint32_t),274 AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 0)*sizeof(uint32_t),
280 data - slices_buf->mapped_mem);275 data - slices_buf->mapped_mem);
281 AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 1)*sizeof(uint32_t),276 AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 1)*sizeof(uint32_t),

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t