[Libva] [Libva-intel-driver][PATCH v2 04/17] Move sampler state related settings to the inner structure in i965_gpe_context
Zhao Yakui
yakui.zhao at intel.com
Fri Nov 18 06:24:04 UTC 2016
On 11/18/2016 01:43 PM, Xiang, Haihao wrote:
> User can set sampler entry size and the number of sampler entries now. sampler.bo is
> always set even if the sampler state is a part of the dynamic state buffer, hence we
> can use the corresponding settings no matter sampler state 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>
>
> Signed-off-by: Xiang, Haihao<haihao.xiang at intel.com>
> ---
> src/gen8_mfc.c | 3 ++-
> src/gen8_vme.c | 4 ++--
> src/gen9_post_processing.c | 13 +++++++------
> src/gen9_vme.c | 4 ++--
> src/gen9_vp9_encoder.c | 15 +++++++++------
> src/i965_gpe_utils.c | 21 ++++++++++++++++-----
> src/i965_gpe_utils.h | 11 +++++++----
> 7 files changed, 45 insertions(+), 26 deletions(-)
>
> diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c
> index c4e46fb..b0ee6fb 100644
> --- a/src/gen8_mfc.c
> +++ b/src/gen8_mfc.c
> @@ -4611,7 +4611,8 @@ Bool gen8_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *e
> 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;
> + mfc_context->gpe_context.sampler.entry_size = 0;
> + mfc_context->gpe_context.sampler.max_entries = 0;
>
> mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1;
> mfc_context->gpe_context.vfe_state.num_urb_entries = 16;
> diff --git a/src/gen8_vme.c b/src/gen8_vme.c
> index 5184ef1..b14d60a 100644
> --- a/src/gen8_vme.c
> +++ b/src/gen8_vme.c
> @@ -1382,8 +1382,8 @@ Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e
> 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;
> -
> + vme_context->gpe_context.sampler.entry_size = 0;
> + vme_context->gpe_context.sampler.max_entries = 0;
>
> vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1;
> vme_context->gpe_context.vfe_state.num_urb_entries = 64;
> diff --git a/src/gen9_post_processing.c b/src/gen9_post_processing.c
> index 2473803..c0ae791 100644
> --- a/src/gen9_post_processing.c
> +++ b/src/gen9_post_processing.c
> @@ -488,15 +488,15 @@ gen9_p010_scaling_sample_state(VADriverContextP ctx,
>
> if (gpe_context == NULL || !src_rect || !dst_rect)
> return;
> - dri_bo_map(gpe_context->dynamic_state.bo, 1);
> + dri_bo_map(gpe_context->sampler.bo, 1);
>
> - if (gpe_context->dynamic_state.bo->virtual == NULL)
> + if (gpe_context->sampler.bo->virtual == NULL)
> return;
>
> - assert(gpe_context->dynamic_state.bo->virtual);
> + assert(gpe_context->sampler.bo->virtual);
>
> sampler_state = (struct gen8_sampler_state *)
> - (gpe_context->dynamic_state.bo->virtual + gpe_context->sampler_offset);
> + (gpe_context->sampler.bo->virtual + gpe_context->sampler.offset);
>
> memset(sampler_state, 0, sizeof(*sampler_state));
>
> @@ -513,7 +513,7 @@ gen9_p010_scaling_sample_state(VADriverContextP ctx,
> sampler_state->ss3.s_wrap_mode = I965_TEXCOORDMODE_CLAMP;
> sampler_state->ss3.t_wrap_mode = I965_TEXCOORDMODE_CLAMP;
>
> - dri_bo_unmap(gpe_context->dynamic_state.bo);
> + dri_bo_unmap(gpe_context->sampler.bo);
> }
>
> void
> @@ -538,7 +538,8 @@ gen9_post_processing_context_init(VADriverContextP ctx,
> gen8_gpe_load_kernels(ctx, gpe_context,&scaling_kernel, 1);
> 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->sampler.entry_size = ALIGN(sizeof(struct gen8_sampler_state), 64);
> + gpe_context->sampler.max_entries = 1;
> gpe_context->curbe.length = ALIGN(sizeof(struct scaling_input_parameter), 64);
>
> gpe_context->surface_state_binding_table.max_entries = MAX_SCALING_SURFACES;
> diff --git a/src/gen9_vme.c b/src/gen9_vme.c
> index 33bf8aa..fab80ce 100644
> --- a/src/gen9_vme.c
> +++ b/src/gen9_vme.c
> @@ -2034,8 +2034,8 @@ Bool gen9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e
> 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;
> -
> + vme_context->gpe_context.sampler.entry_size = 0;
> + vme_context->gpe_context.sampler.max_entries = 0;
>
> vme_context->gpe_context.vfe_state.max_num_threads = 60 - 1;
> vme_context->gpe_context.vfe_state.num_urb_entries = 64;
> diff --git a/src/gen9_vp9_encoder.c b/src/gen9_vp9_encoder.c
> index 5d4a4a8..1badd88 100644
> --- a/src/gen9_vp9_encoder.c
> +++ b/src/gen9_vp9_encoder.c
> @@ -2594,13 +2594,13 @@ gen9_vp9_dys_set_sampler_state(struct i965_gpe_context *gpe_context)
> if (!gpe_context)
> return;
>
> - dri_bo_map(gpe_context->dynamic_state.bo, 1);
> + dri_bo_map(gpe_context->sampler.bo, 1);
>
> - if (!gpe_context->dynamic_state.bo->virtual)
> + if (!gpe_context->sampler.bo->virtual)
> return;
>
> sampler_cmd = (struct gen9_sampler_8x8_avs *)
> - (gpe_context->dynamic_state.bo->virtual + gpe_context->sampler_offset);
> + (gpe_context->sampler.bo->virtual + gpe_context->sampler.offset);
>
> memset(sampler_cmd, 0, sizeof(struct gen9_sampler_8x8_avs));
>
> @@ -2658,7 +2658,7 @@ gen9_vp9_dys_set_sampler_state(struct i965_gpe_context *gpe_context)
> &gen9_vp9_avs_coeffs[17 * 8],
> 15 * sizeof(struct gen8_sampler_8x8_avs_coefficients));
>
> - dri_bo_unmap(gpe_context->dynamic_state.bo);
> + dri_bo_unmap(gpe_context->sampler.bo);
> }
>
> static void
> @@ -3684,9 +3684,12 @@ gen9_init_gpe_context_vp9(struct i965_gpe_context *gpe_context,
> {
> gpe_context->curbe.length = kernel_param->curbe_size; // in bytes
>
> - gpe_context->sampler_size = 0;
> + gpe_context->sampler.entry_size = 0;
> + gpe_context->sampler.max_entries = 0;
> +
> if (kernel_param->sampler_size) {
> - gpe_context->sampler_size = ALIGN(kernel_param->sampler_size, 64);
> + gpe_context->sampler.entry_size = ALIGN(kernel_param->sampler_size, 64);
> + gpe_context->sampler.max_entries = 1;
> }
>
> gpe_context->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64); // 8 dws, 1 register
> diff --git a/src/i965_gpe_utils.c b/src/i965_gpe_utils.c
> index 2d7cfaf..d7286fc 100644
> --- a/src/i965_gpe_utils.c
> +++ b/src/i965_gpe_utils.c
> @@ -1122,7 +1122,8 @@ gen8_gpe_context_init(VADriverContextP ctx,
> assert(bo);
> gpe_context->surface_state_binding_table.bo = bo;
>
> - bo_size = gpe_context->idrt.max_entries * gpe_context->idrt.entry_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.max_entries * gpe_context->sampler.entry_size + 192;
> dri_bo_unreference(gpe_context->dynamic_state.bo);
> bo = dri_bo_alloc(i965->intel.bufmgr,
> "surface state& binding table",
> @@ -1153,8 +1154,11 @@ gen8_gpe_context_init(VADriverContextP ctx,
>
> /* Sampler state offset */
> start_offset = ALIGN(end_offset, 64);
> - gpe_context->sampler_offset = start_offset;
> - end_offset = start_offset + gpe_context->sampler_size;
> + dri_bo_unreference(gpe_context->sampler.bo);
> + gpe_context->sampler.bo = bo;
> + dri_bo_reference(gpe_context->sampler.bo);
> + gpe_context->sampler.offset = start_offset;
> + end_offset = start_offset + gpe_context->sampler.entry_size * gpe_context->sampler.max_entries;
>
> /* update the end offset of dynamic_state */
> gpe_context->dynamic_state.end_offset = end_offset;
> @@ -1181,6 +1185,9 @@ gen8_gpe_context_destroy(struct i965_gpe_context *gpe_context)
>
> dri_bo_unreference(gpe_context->idrt.bo);
> gpe_context->idrt.bo = NULL;
> +
> + dri_bo_unreference(gpe_context->sampler.bo);
> + gpe_context->sampler.bo = NULL;
> }
>
>
> @@ -1642,7 +1649,11 @@ gen8_gpe_context_set_dynamic_buffer(VADriverContextP ctx,
> dri_bo_reference(gpe_context->idrt.bo);
> gpe_context->idrt.offset = ds->idrt_offset;
>
> - gpe_context->sampler_offset = ds->sampler_offset;
> + /* sampler buffer is a part of the dynamic buffer */
> + dri_bo_unreference(gpe_context->sampler.bo);
> + gpe_context->sampler.bo = ds->bo;
> + dri_bo_reference(gpe_context->sampler.bo);
> + gpe_context->sampler.offset = ds->sampler_offset;
>
> return;
> }
> @@ -1704,7 +1715,7 @@ gen8_gpe_setup_interface_data(VADriverContextP ctx,
> memset(desc, 0, sizeof(*desc));
> desc->desc0.kernel_start_pointer = kernel->kernel_offset>> 6;
> desc->desc3.sampler_count = 0;
> - desc->desc3.sampler_state_pointer = (gpe_context->sampler_offset>> 5);
> + desc->desc3.sampler_state_pointer = (gpe_context->sampler.offset>> 5);
> desc->desc4.binding_table_entry_count = 0;
> desc->desc4.binding_table_pointer = (gpe_context->surface_state_binding_table.binding_table_offset>> 5);
> desc->desc5.constant_urb_entry_read_offset = 0;
> diff --git a/src/i965_gpe_utils.h b/src/i965_gpe_utils.h
> index c3b8c79..e19e107 100644
> --- a/src/i965_gpe_utils.h
> +++ b/src/i965_gpe_utils.h
> @@ -97,6 +97,13 @@ struct i965_gpe_context
> } curbe;
>
> struct {
> + dri_bo *bo;
> + unsigned int max_entries;
> + unsigned int entry_size; /* in bytes */
> + unsigned int offset;
> + } sampler;
> +
> + struct {
> unsigned int gpgpu_mode : 1;
> unsigned int pad0 : 7;
> unsigned int max_num_threads : 16;
> @@ -164,10 +171,6 @@ struct i965_gpe_context
> int bo_size;
> unsigned int end_offset;
> } dynamic_state;
> -
> - unsigned int sampler_offset;
> - int sampler_entries;
> - int sampler_size;
> };
>
> struct gpe_mi_flush_dw_parameter
More information about the Libva
mailing list