[Libva] [Libva-intel-driver][PATCH v2 03/17] Move interface descriptor remapping table related settings to the inner structure in i965_gpe_context

Zhao Yakui yakui.zhao at intel.com
Fri Nov 18 06:20:40 UTC 2016


On 11/18/2016 01:43 PM, Xiang, Haihao wrote:
> This patch delete idrt_size and use (idrt.max_entries * idrt.entry_size) instead.
> idrt.bo is always set even if the interface descriptor remapping table is a part of
> the dynamic state buffer, hence we can use the corresponding settings no matter this
> table is a part of the dynamic state buffer or not.

This looks good to me.

Add: Reviewed-by: Zhao Yakui <yakui.zhao at intel.com>

Thanks
>
> Signed-off-by: Xiang, Haihao<haihao.xiang at intel.com>
> ---
>   src/gen75_vpp_gpe.c        | 10 +++++-----
>   src/gen8_mfc.c             |  7 ++++---
>   src/gen8_vme.c             |  8 +++++---
>   src/gen9_post_processing.c |  3 ++-
>   src/gen9_vme.c             |  7 ++++---
>   src/gen9_vp9_encoder.c     |  2 --
>   src/i965_gpe_utils.c       | 27 +++++++++++++++++++--------
>   src/i965_gpe_utils.h       |  3 +--
>   8 files changed, 40 insertions(+), 27 deletions(-)
>
> diff --git a/src/gen75_vpp_gpe.c b/src/gen75_vpp_gpe.c
> index 2cddb5a..6f5e2ef 100644
> --- a/src/gen75_vpp_gpe.c
> +++ b/src/gen75_vpp_gpe.c
> @@ -406,13 +406,13 @@ gen8_gpe_process_interface_setup(VADriverContextP ctx,
>                       struct vpp_gpe_context *vpp_gpe_ctx)
>   {
>       struct gen8_interface_descriptor_data *desc;
> -    dri_bo *bo = vpp_gpe_ctx->gpe_ctx.dynamic_state.bo;
> +    dri_bo *bo = vpp_gpe_ctx->gpe_ctx.idrt.bo;
>       int i;
>
>       dri_bo_map(bo, 1);
>       assert(bo->virtual);
>       desc = (struct gen8_interface_descriptor_data *)(bo->virtual
> -                               + vpp_gpe_ctx->gpe_ctx.idrt_offset);
> +                               + vpp_gpe_ctx->gpe_ctx.idrt.offset);
>
>       /*Setup the descritor table*/
>       for (i = 0; i<  vpp_gpe_ctx->sub_shader_sum; i++){
> @@ -880,7 +880,7 @@ vpp_gpe_context_init(VADriverContextP ctx)
>
>           gpe_ctx->curbe.length = CURBE_TOTAL_DATA_LENGTH;
>           gpe_ctx->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
> -        gpe_ctx->idrt.entry_size = sizeof(struct gen6_interface_descriptor_data);
> +        gpe_ctx->idrt.entry_size = ALIGN(sizeof(struct gen6_interface_descriptor_data), 64);
>
>       } else if (IS_GEN8(i965->intel.device_info) ||
>                  IS_GEN9(i965->intel.device_info)) {
> @@ -891,8 +891,8 @@ vpp_gpe_context_init(VADriverContextP ctx)
>                  (SURFACE_STATE_PADDED_SIZE_GEN8 + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
>
>           gpe_ctx->curbe.length = CURBE_TOTAL_DATA_LENGTH;
> -        gpe_ctx->idrt_size  = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
> -
> +        gpe_ctx->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
> +        gpe_ctx->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
>       }
>
>       return vpp_gpe_ctx;
> diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c
> index 3ed9e84..c4e46fb 100644
> --- a/src/gen8_mfc.c
> +++ b/src/gen8_mfc.c
> @@ -1333,10 +1333,10 @@ gen8_mfc_batchbuffer_idrt_setup(VADriverContextP ctx,
>       dri_bo *bo;
>       unsigned char *desc_ptr;
>
> -    bo = mfc_context->gpe_context.dynamic_state.bo;
> +    bo = mfc_context->gpe_context.idrt.bo;
>       dri_bo_map(bo, 1);
>       assert(bo->virtual);
> -    desc_ptr = (unsigned char *)bo->virtual + mfc_context->gpe_context.idrt_offset;
> +    desc_ptr = (unsigned char *)bo->virtual + mfc_context->gpe_context.idrt.offset;
>
>       desc = (struct gen8_interface_descriptor_data *)desc_ptr;
>
> @@ -4608,7 +4608,8 @@ Bool gen8_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *e
>       assert(mfc_context);
>       mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
>
> -    mfc_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
> +    mfc_context->gpe_context.idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
> +    mfc_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
>       mfc_context->gpe_context.curbe.length = 32 * 4;
>       mfc_context->gpe_context.sampler_size = 0;
>
> diff --git a/src/gen8_vme.c b/src/gen8_vme.c
> index 96835bf..5184ef1 100644
> --- a/src/gen8_vme.c
> +++ b/src/gen8_vme.c
> @@ -333,10 +333,10 @@ static VAStatus gen8_vme_interface_setup(VADriverContextP ctx,
>       dri_bo *bo;
>       unsigned char *desc_ptr;
>
> -    bo = vme_context->gpe_context.dynamic_state.bo;
> +    bo = vme_context->gpe_context.idrt.bo;
>       dri_bo_map(bo, 1);
>       assert(bo->virtual);
> -    desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt_offset;
> +    desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt.offset;
>
>       desc = (struct gen8_interface_descriptor_data *)desc_ptr;
>
> @@ -1378,7 +1378,9 @@ Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e
>           vme_context->vme_kernel_sum = i965_kernel_num;
>           vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
>
> -        vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
> +        vme_context->gpe_context.idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
> +        vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
> +
>           vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH;
>           vme_context->gpe_context.sampler_size = 0;
>
> diff --git a/src/gen9_post_processing.c b/src/gen9_post_processing.c
> index 71da501..2473803 100644
> --- a/src/gen9_post_processing.c
> +++ b/src/gen9_post_processing.c
> @@ -536,7 +536,8 @@ gen9_post_processing_context_init(VADriverContextP ctx,
>       scaling_kernel.bin = pp_10bit_scaling_gen9;
>       scaling_kernel.size = sizeof(pp_10bit_scaling_gen9);
>       gen8_gpe_load_kernels(ctx, gpe_context,&scaling_kernel, 1);
> -    gpe_context->idrt_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
> +    gpe_context->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
> +    gpe_context->idrt.max_entries = 1;
>       gpe_context->sampler_size = ALIGN(sizeof(struct gen8_sampler_state), 64);
>       gpe_context->curbe.length = ALIGN(sizeof(struct scaling_input_parameter), 64);
>
> diff --git a/src/gen9_vme.c b/src/gen9_vme.c
> index a59fe2a..33bf8aa 100644
> --- a/src/gen9_vme.c
> +++ b/src/gen9_vme.c
> @@ -376,10 +376,10 @@ static VAStatus gen9_vme_interface_setup(VADriverContextP ctx,
>       dri_bo *bo;
>       unsigned char *desc_ptr;
>
> -    bo = vme_context->gpe_context.dynamic_state.bo;
> +    bo = vme_context->gpe_context.idrt.bo;
>       dri_bo_map(bo, 1);
>       assert(bo->virtual);
> -    desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt_offset;
> +    desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt.offset;
>
>       desc = (struct gen8_interface_descriptor_data *)desc_ptr;
>
> @@ -2031,7 +2031,8 @@ Bool gen9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e
>       vme_context->vme_kernel_sum = i965_kernel_num;
>       vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
>
> -    vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
> +    vme_context->gpe_context.idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
> +    vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
>       vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH;
>       vme_context->gpe_context.sampler_size = 0;
>
> diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c
> index 5ad7b26..5d4a4a8 100644
> --- a/src/gen9_vp9_encoder.c
> +++ b/src/gen9_vp9_encoder.c
> @@ -3691,8 +3691,6 @@ gen9_init_gpe_context_vp9(struct i965_gpe_context *gpe_context,
>
>       gpe_context->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64); // 8 dws, 1 register
>       gpe_context->idrt.max_entries = NUM_KERNELS_PER_GPE_CONTEXT;
> -    gpe_context->idrt_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64) *
> -                                   NUM_KERNELS_PER_GPE_CONTEXT;
>
>       gpe_context->surface_state_binding_table.max_entries = MAX_VP9_ENCODER_SURFACES;
>       gpe_context->surface_state_binding_table.binding_table_offset = 0;
> diff --git a/src/i965_gpe_utils.c b/src/i965_gpe_utils.c
> index 3739a88..2d7cfaf 100644
> --- a/src/i965_gpe_utils.c
> +++ b/src/i965_gpe_utils.c
> @@ -1084,8 +1084,8 @@ gen8_gpe_idrt(VADriverContextP ctx,
>
>       OUT_BATCH(batch, CMD_MEDIA_INTERFACE_LOAD | (4 - 2));
>       OUT_BATCH(batch, 0);
> -    OUT_BATCH(batch, gpe_context->idrt_size);
> -    OUT_BATCH(batch, gpe_context->idrt_offset);
> +    OUT_BATCH(batch, gpe_context->idrt.max_entries * gpe_context->idrt.entry_size);
> +    OUT_BATCH(batch, gpe_context->idrt.offset);
>
>       ADVANCE_BATCH(batch);
>   }
> @@ -1122,7 +1122,7 @@ gen8_gpe_context_init(VADriverContextP ctx,
>       assert(bo);
>       gpe_context->surface_state_binding_table.bo = bo;
>
> -    bo_size = gpe_context->idrt_size + gpe_context->curbe.length + gpe_context->sampler_size + 192;
> +    bo_size = gpe_context->idrt.max_entries * gpe_context->idrt.entry_size + gpe_context->curbe.length + gpe_context->sampler_size + 192;
>       dri_bo_unreference(gpe_context->dynamic_state.bo);
>       bo = dri_bo_alloc(i965->intel.bufmgr,
>                         "surface state&  binding table",
> @@ -1145,8 +1145,11 @@ gen8_gpe_context_init(VADriverContextP ctx,
>
>       /* Interface descriptor offset */
>       start_offset = ALIGN(end_offset, 64);
> -    gpe_context->idrt_offset = start_offset;
> -    end_offset = start_offset + gpe_context->idrt_size;
> +    dri_bo_unreference(gpe_context->idrt.bo);
> +    gpe_context->idrt.bo = bo;
> +    dri_bo_reference(gpe_context->idrt.bo);
> +    gpe_context->idrt.offset = start_offset;
> +    end_offset = start_offset + gpe_context->idrt.entry_size * gpe_context->idrt.max_entries;
>
>       /* Sampler state offset */
>       start_offset = ALIGN(end_offset, 64);
> @@ -1175,6 +1178,9 @@ gen8_gpe_context_destroy(struct i965_gpe_context *gpe_context)
>
>       dri_bo_unreference(gpe_context->curbe.bo);
>       gpe_context->curbe.bo = NULL;
> +
> +    dri_bo_unreference(gpe_context->idrt.bo);
> +    gpe_context->idrt.bo = NULL;
>   }
>
>
> @@ -1630,7 +1636,12 @@ gen8_gpe_context_set_dynamic_buffer(VADriverContextP ctx,
>       dri_bo_reference(gpe_context->curbe.bo);
>       gpe_context->curbe.offset = ds->curbe_offset;
>
> -    gpe_context->idrt_offset = ds->idrt_offset;
> +    /* idrt buffer is a part of the dynamic buffer */
> +    dri_bo_unreference(gpe_context->idrt.bo);
> +    gpe_context->idrt.bo = ds->bo;
> +    dri_bo_reference(gpe_context->idrt.bo);
> +    gpe_context->idrt.offset = ds->idrt_offset;
> +
>       gpe_context->sampler_offset = ds->sampler_offset;
>
>       return;
> @@ -1677,10 +1688,10 @@ gen8_gpe_setup_interface_data(VADriverContextP ctx,
>       dri_bo *bo;
>       unsigned char *desc_ptr;
>
> -    bo = gpe_context->dynamic_state.bo;
> +    bo = gpe_context->idrt.bo;
>       dri_bo_map(bo, 1);
>       assert(bo->virtual);
> -    desc_ptr = (unsigned char *)bo->virtual + gpe_context->idrt_offset;
> +    desc_ptr = (unsigned char *)bo->virtual + gpe_context->idrt.offset;
>       desc = (struct gen8_interface_descriptor_data *)desc_ptr;
>
>       for (i = 0; i<  gpe_context->num_kernels; i++) {
> diff --git a/src/i965_gpe_utils.h b/src/i965_gpe_utils.h
> index 92123fe..c3b8c79 100644
> --- a/src/i965_gpe_utils.h
> +++ b/src/i965_gpe_utils.h
> @@ -87,6 +87,7 @@ struct i965_gpe_context
>           dri_bo *bo;
>           unsigned int max_entries;
>           unsigned int entry_size;        /* in bytes */
> +        unsigned int offset;
>       } idrt;
>
>       struct {
> @@ -167,8 +168,6 @@ struct i965_gpe_context
>       unsigned int sampler_offset;
>       int sampler_entries;
>       int sampler_size;
> -    unsigned int idrt_offset;
> -    int idrt_size;
>   };
>
>   struct gpe_mi_flush_dw_parameter



More information about the Libva mailing list