mirror of https://git.ffmpeg.org/ffmpeg.git
vulkan_filter: require storage images properly, set usage flags explicitly
This caused images to be created without a storage usage, which broke at least lavapipe.
This commit is contained in:
parent
c41ef7f2ff
commit
eb5088d28c
|
@ -68,7 +68,8 @@ int ff_vk_filter_init_context(AVFilterContext *avctx, FFVulkanContext *s,
|
||||||
vk = &s->vkfn;
|
vk = &s->vkfn;
|
||||||
|
|
||||||
/* Usage mismatch */
|
/* Usage mismatch */
|
||||||
usage_req = VK_IMAGE_USAGE_SAMPLED_BIT;
|
usage_req = VK_IMAGE_USAGE_SAMPLED_BIT |
|
||||||
|
VK_IMAGE_USAGE_STORAGE_BIT;
|
||||||
|
|
||||||
/* If format supports hardware encoding, make sure
|
/* If format supports hardware encoding, make sure
|
||||||
* the context includes it. */
|
* the context includes it. */
|
||||||
|
@ -106,9 +107,11 @@ int ff_vk_filter_init_context(AVFilterContext *avctx, FFVulkanContext *s,
|
||||||
/* Check if it's usable */
|
/* Check if it's usable */
|
||||||
if (no_storage) {
|
if (no_storage) {
|
||||||
skip:
|
skip:
|
||||||
|
av_log(avctx, AV_LOG_VERBOSE, "Cannot reuse context, creating a new one\n");
|
||||||
device_ref = frames_ctx->device_ref;
|
device_ref = frames_ctx->device_ref;
|
||||||
frames_ref = NULL;
|
frames_ref = NULL;
|
||||||
} else {
|
} else {
|
||||||
|
av_log(avctx, AV_LOG_VERBOSE, "Reusing existing frames context\n");
|
||||||
frames_ref = av_buffer_ref(frames_ref);
|
frames_ref = av_buffer_ref(frames_ref);
|
||||||
if (!frames_ref)
|
if (!frames_ref)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
@ -130,6 +133,12 @@ skip:
|
||||||
frames_ctx->width = width;
|
frames_ctx->width = width;
|
||||||
frames_ctx->height = height;
|
frames_ctx->height = height;
|
||||||
|
|
||||||
|
vk_frames = frames_ctx->hwctx;
|
||||||
|
vk_frames->tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||||
|
vk_frames->usage = VK_IMAGE_USAGE_SAMPLED_BIT |
|
||||||
|
VK_IMAGE_USAGE_STORAGE_BIT |
|
||||||
|
VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
|
||||||
|
|
||||||
err = av_hwframe_ctx_init(frames_ref);
|
err = av_hwframe_ctx_init(frames_ref);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
av_buffer_unref(&frames_ref);
|
av_buffer_unref(&frames_ref);
|
||||||
|
|
Loading…
Reference in New Issue