ffv1enc_vulkan: only use native image representation
This was done for an unknown reason, and for whatever reason, non-rgb 8+ bit formats were broken by this.
This commit is contained in:
@@ -96,9 +96,6 @@ typedef struct VulkanEncodeFFv1Context {
|
||||
/* Intermediate frame pool */
|
||||
AVBufferRef *intermediate_frames_ref;
|
||||
|
||||
/* Representation mode */
|
||||
enum FFVkShaderRepFormat rep_fmt;
|
||||
|
||||
int num_h_slices;
|
||||
int num_v_slices;
|
||||
int force_pcm;
|
||||
@@ -380,7 +377,7 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext *avctx,
|
||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
|
||||
|
||||
RET(ff_vk_create_imageviews(&fv->s, exec, src_views, src,
|
||||
fv->rep_fmt));
|
||||
FF_VK_REP_NATIVE));
|
||||
ff_vk_frame_barrier(&fv->s, exec, src, img_bar, &nb_img_bar,
|
||||
VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
|
||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
|
||||
@@ -402,7 +399,7 @@ static int vulkan_encode_ffv1_submit_frame(AVCodecContext *avctx,
|
||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT));
|
||||
RET(ff_vk_create_imageviews(&fv->s, exec, tmp_views,
|
||||
tmp,
|
||||
fv->rep_fmt));
|
||||
FF_VK_REP_NATIVE));
|
||||
}
|
||||
|
||||
/* Setup shader */
|
||||
@@ -1084,7 +1081,7 @@ static int init_rct_search_shader(AVCodecContext *avctx, FFVkSPIRVCompiler *spv)
|
||||
.type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.dimensions = 2,
|
||||
.mem_layout = ff_vk_shader_rep_fmt(fv->s.frames->sw_format,
|
||||
fv->rep_fmt),
|
||||
FF_VK_REP_NATIVE),
|
||||
.elems = av_pix_fmt_count_planes(fv->s.frames->sw_format),
|
||||
.mem_quali = "readonly",
|
||||
.stages = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
@@ -1169,7 +1166,7 @@ static int init_setup_shader(AVCodecContext *avctx, FFVkSPIRVCompiler *spv)
|
||||
.type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.dimensions = 2,
|
||||
.mem_layout = ff_vk_shader_rep_fmt(fv->s.frames->sw_format,
|
||||
fv->rep_fmt),
|
||||
FF_VK_REP_NATIVE),
|
||||
.elems = av_pix_fmt_count_planes(fv->s.frames->sw_format),
|
||||
.mem_quali = "readonly",
|
||||
.stages = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
@@ -1355,7 +1352,7 @@ static int init_encode_shader(AVCodecContext *avctx, FFVkSPIRVCompiler *spv)
|
||||
.type = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
|
||||
.dimensions = 2,
|
||||
.mem_layout = ff_vk_shader_rep_fmt(fv->s.frames->sw_format,
|
||||
fv->rep_fmt),
|
||||
FF_VK_REP_NATIVE),
|
||||
.elems = av_pix_fmt_count_planes(fv->s.frames->sw_format),
|
||||
.mem_quali = "readonly",
|
||||
.stages = VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
@@ -1610,12 +1607,6 @@ static av_cold int vulkan_encode_ffv1_init(AVCodecContext *avctx)
|
||||
fv->is_rgb = !(f->colorspace == 0 && avctx->sw_pix_fmt != AV_PIX_FMT_YA8) &&
|
||||
!(avctx->sw_pix_fmt == AV_PIX_FMT_YA8);
|
||||
|
||||
/* bits_per_raw_sample use regular unsigned representation,
|
||||
* but in higher bit depths, the data is casted to int16_t */
|
||||
fv->rep_fmt = FF_VK_REP_UINT;
|
||||
if (!fv->is_rgb && f->bits_per_raw_sample > 8)
|
||||
fv->rep_fmt = FF_VK_REP_INT;
|
||||
|
||||
/* Init rct search shader */
|
||||
fv->optimize_rct = fv->is_rgb && f->version >= 4 &&
|
||||
!fv->force_pcm && fv->optimize_rct;
|
||||
|
||||
Reference in New Issue
Block a user