In filtering, and SDR encoding, we use storage images. This fixes using Vulkan filters on Intel. Tested not to break anything on the three major vendors.
Unified · Split
| @@ -1070,7 +1070,8 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) · 1069 unmodified lines | |||
| 1070 | 1070 | ||
| 1071 | hwfc->format[0] = vkfmt; | 1071 | hwfc->format[0] = vkfmt; |
| 1072 | hwfc->tiling = VK_IMAGE_TILING_OPTIMAL; | 1072 | hwfc->tiling = VK_IMAGE_TILING_OPTIMAL; |
| 1073 | hwfc->usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | | 1073 | hwfc->usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | |
| 1074 | VK_IMAGE_USAGE_STORAGE_BIT | | ||
| 1074 | VK_IMAGE_USAGE_SAMPLED_BIT; | 1075 | VK_IMAGE_USAGE_SAMPLED_BIT; |
| 1075 | 1076 | ||
| 1076 | if (prof) { | 1077 | if (prof) { |
| @@ -1084,8 +1085,6 @@ int ff_vk_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) · 7 unmodified lines | |||
| 1084 | if (ctx->s.extensions & (FF_VK_EXT_VIDEO_ENCODE_QUEUE | | 1085 | if (ctx->s.extensions & (FF_VK_EXT_VIDEO_ENCODE_QUEUE | |
| 1085 | FF_VK_EXT_VIDEO_MAINTENANCE_1)) | 1086 | FF_VK_EXT_VIDEO_MAINTENANCE_1)) |
| 1086 | hwfc->usage |= VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR; | 1087 | hwfc->usage |= VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR; |
| 1087 | } else if (DECODER_IS_SDR(avctx->codec_id)) { | ||
| 1088 | hwfc->usage |= VK_IMAGE_USAGE_STORAGE_BIT; | ||
| 1089 | } | 1088 | } |
| 1090 | 1089 | ||
| 1091 | return err; | 1090 | return err; |