[Libva] [PATCH 06/14] Encoding: Dynamically select one mechanism to construct encoding command buffer for each frame on Haswell and Gen7/Gen6
Xiang, Haihao
haihao.xiang at intel.com
Fri Jul 1 08:25:40 UTC 2016
LGTM.
Thanks
Haihao
> From: Zhao Yakui <yakui.zhao at intel.com>
>
> v1: combine the Haswell and Gen7/6 patch together
>
> Currently it uses the fixed policy to construct encoding command
> buffer.
> (Use CPU or GPU). And it is statically compiled.
> But sometimes it needs to choose the different mechanism on the fly
> instead
> of statically compiled mode.
>
> Signed-off-by: Zhao Yakui <yakui.zhaoi at intel.com>
> Signed-off-by: pjl <ceciliapeng at intel.com>
> Signed-off-by: Pengfei Qu <Pengfei.Qu at intel.com>
> ---
> src/gen6_mfc.c | 12 ++++--------
> src/gen6_mfc.h | 1 -
> src/gen75_mfc.c | 15 +++++----------
> src/i965_encoder.h | 1 +
> 4 files changed, 10 insertions(+), 19 deletions(-)
>
> diff --git a/src/gen6_mfc.c b/src/gen6_mfc.c
> index acefc97..0208ddb 100644
> --- a/src/gen6_mfc.c
> +++ b/src/gen6_mfc.c
> @@ -676,7 +676,6 @@ gen6_mfc_stop(VADriverContextP ctx,
> return VA_STATUS_SUCCESS;
> }
>
> -#if __SOFTWARE__
>
> static int
> gen6_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y,
> int end_mb, int qp,unsigned int *msg,
> @@ -899,7 +898,6 @@
> gen6_mfc_avc_software_batchbuffer(VADriverContextP ctx,
> return batch_bo;
> }
>
> -#else
>
> static void
> gen6_mfc_batchbuffer_surfaces_input(VADriverContextP ctx,
> @@ -1299,7 +1297,6 @@
> gen6_mfc_avc_hardware_batchbuffer(VADriverContextP ctx,
> return mfc_context->mfc_batchbuffer_surface.bo;
> }
>
> -#endif
>
>
> static void
> @@ -1316,11 +1313,10 @@
> gen6_mfc_avc_pipeline_programing(VADriverContextP ctx,
> return;
> }
>
> -#if __SOFTWARE__
> - slice_batch_bo = gen6_mfc_avc_software_batchbuffer(ctx,
> encode_state, encoder_context);
> -#else
> - slice_batch_bo = gen6_mfc_avc_hardware_batchbuffer(ctx,
> encode_state, encoder_context);
> -#endif
> + if (encoder_context->soft_batch_force)
> + slice_batch_bo = gen6_mfc_avc_software_batchbuffer(ctx,
> encode_state, encoder_context);
> + else
> + slice_batch_bo = gen6_mfc_avc_hardware_batchbuffer(ctx,
> encode_state, encoder_context);
>
> // begin programing
> intel_batchbuffer_start_atomic_bcs(batch, 0x4000);
> diff --git a/src/gen6_mfc.h b/src/gen6_mfc.h
> index 087c676..fa610d4 100644
> --- a/src/gen6_mfc.h
> +++ b/src/gen6_mfc.h
> @@ -50,7 +50,6 @@ struct encode_state;
> /* the space required for slice tail. */
> #define SLICE_TAIL 16
>
> -#define __SOFTWARE__ 0
>
> #define MFC_BATCHBUFFER_AVC_INTRA 0
> #define MFC_BATCHBUFFER_AVC_INTER 1
> diff --git a/src/gen75_mfc.c b/src/gen75_mfc.c
> index b6b18ea..bdce652 100644
> --- a/src/gen75_mfc.c
> +++ b/src/gen75_mfc.c
> @@ -49,8 +49,6 @@
> #define AVC_INTER_MV_OFFSET 48
> #define AVC_RDO_MASK 0xFFFF
>
> -#define MFC_SOFTWARE_HASWELL 0
> -
> #define
> SURFACE_STATE_PADDED_SIZE MAX(SURFACE_STATE_PADDED_SIZE
> _GEN6, SURFACE_STATE_PADDED_SIZE_GEN7)
> #define
> SURFACE_STATE_OFFSET(index) (SURFACE_STATE_PADDED_SIZE *
> index)
> #define
> BINDING_TABLE_OFFSET(index) (SURFACE_STATE_OFFSET(MAX_MED
> IA_SURFACES_GEN6) + sizeof(unsigned int) * index)
> @@ -995,7 +993,6 @@ gen75_mfc_avc_slice_state(VADriverContextP ctx,
> }
>
>
> -#if MFC_SOFTWARE_HASWELL
>
> static int
> gen75_mfc_avc_pak_object_intra(VADriverContextP ctx, int x, int y,
> int end_mb,
> @@ -1275,7 +1272,6 @@
> gen75_mfc_avc_software_batchbuffer(VADriverContextP ctx,
> return batch_bo;
> }
>
> -#else
>
> static void
> gen75_mfc_batchbuffer_surfaces_input(VADriverContextP ctx,
> @@ -1636,7 +1632,6 @@
> gen75_mfc_avc_hardware_batchbuffer(VADriverContextP ctx,
> return mfc_context->aux_batchbuffer_surface.bo;
> }
>
> -#endif
>
> static void
> gen75_mfc_avc_pipeline_programing(VADriverContextP ctx,
> @@ -1652,11 +1647,11 @@
> gen75_mfc_avc_pipeline_programing(VADriverContextP ctx,
> return;
> }
>
> -#if MFC_SOFTWARE_HASWELL
> - slice_batch_bo = gen75_mfc_avc_software_batchbuffer(ctx,
> encode_state, encoder_context);
> -#else
> - slice_batch_bo = gen75_mfc_avc_hardware_batchbuffer(ctx,
> encode_state, encoder_context);
> -#endif
> +
> + if (encoder_context->soft_batch_force)
> + slice_batch_bo = gen75_mfc_avc_software_batchbuffer(ctx,
> encode_state, encoder_context);
> + else
> + slice_batch_bo = gen75_mfc_avc_hardware_batchbuffer(ctx,
> encode_state, encoder_context);
>
> // begin programing
> intel_batchbuffer_start_atomic_bcs(batch, 0x4000);
> diff --git a/src/i965_encoder.h b/src/i965_encoder.h
> index ddfcf9f..94d84b5 100644
> --- a/src/i965_encoder.h
> +++ b/src/i965_encoder.h
> @@ -65,6 +65,7 @@ struct intel_encoder_context
>
> unsigned int is_tmp_id:1;
> unsigned int low_power_mode:1;
> + unsigned int soft_batch_force:1;
>
> void (*vme_context_destroy)(void *vme_context);
> VAStatus (*vme_pipeline)(VADriverContextP ctx,
More information about the Libva
mailing list