The commit which added support for host mapping accidentally broke the original, upload route. For drivers without host-mapping (very few), fix it.
Unified · Split
| @@ -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), |