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 | 182 | fp->crc_checked = f->ec && (avctx->err_recognition & AV_EF_CRCCHECK); |
| 183 | 183 | |
| 184 | 184 | /* Host map the input slices data if supported */ |
| 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, | |
| 187 | − buffer_ref, | |
| 188 | − VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | | |
| 189 | − VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT); | |
| 190 | − if (err < 0) | |
| 191 | − return err; | |
| 192 | − } | |
| 185 | + if (ctx->s.extensions & FF_VK_EXT_EXTERNAL_HOST_MEMORY) | |
| 186 | + ff_vk_host_map_buffer(&ctx->s, &vp->slices_buf, buffer_ref->data, | |
| 187 | + buffer_ref, | |
| 188 | + VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | | |
| 189 | + VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT); | |
| 193 | 190 | |
| 194 | 191 | /* Allocate slice state data */ |
| 195 | 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 | 263 | uint32_t size) |
| 267 | 264 | { |
| 268 | 265 | FFV1Context *f = avctx->priv_data; |
| 269 | − FFVulkanDecodeContext *dec = avctx->internal->hwaccel_priv_data; | |
| 270 | − FFVulkanDecodeShared *ctx = dec->shared_ctx; | |
| 271 | 266 | |
| 272 | 267 | FFv1VulkanDecodePicture *fp = f->hwaccel_picture_private; |
| 273 | 268 | FFVulkanDecodePicture *vp = &fp->vp; |
| 274 | 269 | |
| 275 | 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) { | |
| 278 | − FFVkBuffer *slices_buf = (FFVkBuffer *)vp->slices_buf->data; | |
| 273 | + if (slices_buf && slices_buf->host_ref) { | |
| 279 | 274 | AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 0)*sizeof(uint32_t), |
| 280 | 275 | data - slices_buf->mapped_mem); |
| 281 | 276 | AV_WN32(slice_offset->mapped_mem + (2*fp->slice_num + 1)*sizeof(uint32_t), |