To avoid confusion between curbe.length and curbe_size, this patch uses curbe.length only. curbe.bo is always set even if curbe is a part of the dynamic state buffer, hence we can use curbe related settings no matter it is a part of the dynamic state buffer or not.
Signed-off-by: Xiang, Haihao <haihao.xi...@intel.com> --- src/gen75_vpp_gpe.c | 2 +- src/gen8_mfc.c | 2 +- src/gen8_vme.c | 12 ++++++------ src/gen9_post_processing.c | 3 +-- src/gen9_vme.c | 12 ++++++------ src/gen9_vp9_encoder.c | 22 ++++++++++------------ src/i965_gpe_utils.c | 28 +++++++++++++++++++--------- src/i965_gpe_utils.h | 3 +-- 8 files changed, 45 insertions(+), 39 deletions(-) diff --git a/src/gen75_vpp_gpe.c b/src/gen75_vpp_gpe.c index 9850c1c..2cddb5a 100644 --- a/src/gen75_vpp_gpe.c +++ b/src/gen75_vpp_gpe.c @@ -890,7 +890,7 @@ vpp_gpe_context_init(VADriverContextP ctx) gpe_ctx->surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE_GEN8 + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6; - gpe_ctx->curbe_size = CURBE_TOTAL_DATA_LENGTH; + gpe_ctx->curbe.length = CURBE_TOTAL_DATA_LENGTH; gpe_ctx->idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6; } diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c index 63ffea5..3ed9e84 100644 --- a/src/gen8_mfc.c +++ b/src/gen8_mfc.c @@ -4609,7 +4609,7 @@ Bool gen8_mfc_context_init(VADriverContextP ctx, struct intel_encoder_context *e 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.curbe_size = 32 * 4; + mfc_context->gpe_context.curbe.length = 32 * 4; mfc_context->gpe_context.sampler_size = 0; mfc_context->gpe_context.vfe_state.max_num_threads = 60 - 1; diff --git a/src/gen8_vme.c b/src/gen8_vme.c index c79c62b..96835bf 100644 --- a/src/gen8_vme.c +++ b/src/gen8_vme.c @@ -389,10 +389,10 @@ static VAStatus gen8_vme_constant_setup(VADriverContextP ctx, vme_state_message[31] = mv_num; - dri_bo_map(vme_context->gpe_context.dynamic_state.bo, 1); - assert(vme_context->gpe_context.dynamic_state.bo->virtual); - constant_buffer = (unsigned char *)vme_context->gpe_context.dynamic_state.bo->virtual + - vme_context->gpe_context.curbe_offset; + dri_bo_map(vme_context->gpe_context.curbe.bo, 1); + assert(vme_context->gpe_context.curbe.bo->virtual); + constant_buffer = (unsigned char *)vme_context->gpe_context.curbe.bo->virtual + + vme_context->gpe_context.curbe.offset; /* VME MV/Mb cost table is passed by using const buffer */ /* Now it uses the fixed search path. So it is constructed directly @@ -400,7 +400,7 @@ static VAStatus gen8_vme_constant_setup(VADriverContextP ctx, */ memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); - dri_bo_unmap(vme_context->gpe_context.dynamic_state.bo); + dri_bo_unmap(vme_context->gpe_context.curbe.bo); return VA_STATUS_SUCCESS; } @@ -1379,7 +1379,7 @@ Bool gen8_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e 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.curbe_size = CURBE_TOTAL_DATA_LENGTH; + 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 a5d345c..71da501 100644 --- a/src/gen9_post_processing.c +++ b/src/gen9_post_processing.c @@ -538,8 +538,7 @@ gen9_post_processing_context_init(VADriverContextP ctx, gen8_gpe_load_kernels(ctx, gpe_context, &scaling_kernel, 1); gpe_context->idrt_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64); gpe_context->sampler_size = ALIGN(sizeof(struct gen8_sampler_state), 64); - gpe_context->curbe_size = ALIGN(sizeof(struct scaling_input_parameter), 64); - gpe_context->curbe.length = gpe_context->curbe_size; + gpe_context->curbe.length = ALIGN(sizeof(struct scaling_input_parameter), 64); gpe_context->surface_state_binding_table.max_entries = MAX_SCALING_SURFACES; gpe_context->surface_state_binding_table.binding_table_offset = 0; diff --git a/src/gen9_vme.c b/src/gen9_vme.c index 6ad8fff..a59fe2a 100644 --- a/src/gen9_vme.c +++ b/src/gen9_vme.c @@ -438,10 +438,10 @@ static VAStatus gen9_vme_constant_setup(VADriverContextP ctx, vme_state_message[31] = mv_num; - dri_bo_map(vme_context->gpe_context.dynamic_state.bo, 1); - assert(vme_context->gpe_context.dynamic_state.bo->virtual); - constant_buffer = (unsigned char *)vme_context->gpe_context.dynamic_state.bo->virtual + - vme_context->gpe_context.curbe_offset; + dri_bo_map(vme_context->gpe_context.curbe.bo, 1); + assert(vme_context->gpe_context.curbe.bo->virtual); + constant_buffer = (unsigned char *)vme_context->gpe_context.curbe.bo->virtual + + vme_context->gpe_context.curbe.offset; /* VME MV/Mb cost table is passed by using const buffer */ /* Now it uses the fixed search path. So it is constructed directly @@ -449,7 +449,7 @@ static VAStatus gen9_vme_constant_setup(VADriverContextP ctx, */ memcpy(constant_buffer, (char *)vme_context->vme_state_message, 128); - dri_bo_unmap(vme_context->gpe_context.dynamic_state.bo); + dri_bo_unmap(vme_context->gpe_context.curbe.bo); return VA_STATUS_SUCCESS; } @@ -2032,7 +2032,7 @@ Bool gen9_vme_context_init(VADriverContextP ctx, struct intel_encoder_context *e 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.curbe_size = CURBE_TOTAL_DATA_LENGTH; + 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 f39d6d0..5ad7b26 100644 --- a/src/gen9_vp9_encoder.c +++ b/src/gen9_vp9_encoder.c @@ -1820,18 +1820,18 @@ gen9_brc_update_add_surfaces_vp9(VADriverContextP ctx, /* 4. Mbenc curbe input buffer */ gen9_add_dri_buffer_gpe_surface(ctx, brc_gpe_context, - mbenc_gpe_context->dynamic_state.bo, + mbenc_gpe_context->curbe.bo, 0, - ALIGN(mbenc_gpe_context->curbe_size, 64), - mbenc_gpe_context->curbe_offset, + ALIGN(mbenc_gpe_context->curbe.length, 64), + mbenc_gpe_context->curbe.offset, VP9_BTI_BRC_MBENC_CURBE_INPUT_G9); /* 5. Mbenc curbe output buffer */ gen9_add_dri_buffer_gpe_surface(ctx, brc_gpe_context, - mbenc_gpe_context->dynamic_state.bo, + mbenc_gpe_context->curbe.bo, 0, - ALIGN(mbenc_gpe_context->curbe_size, 64), - mbenc_gpe_context->curbe_offset, + ALIGN(mbenc_gpe_context->curbe.length, 64), + mbenc_gpe_context->curbe.offset, VP9_BTI_BRC_MBENC_CURBE_OUTPUT_G9); /* 6. BRC_PIC_STATE read buffer */ @@ -3289,10 +3289,10 @@ gen9_vp9_send_mbenc_surface(VADriverContextP ctx, gen9_add_dri_buffer_gpe_surface(ctx, gpe_context, - mbenc_param->gpe_context_tx->dynamic_state.bo, + mbenc_param->gpe_context_tx->curbe.bo, 0, ALIGN(res_size, 64), - mbenc_param->gpe_context_tx->curbe_offset, + mbenc_param->gpe_context_tx->curbe.offset, VP9_BTI_MBENC_TX_CURBE_G9); break; @@ -3441,10 +3441,10 @@ gen9_vp9_send_mbenc_surface(VADriverContextP ctx, gen9_add_dri_buffer_gpe_surface(ctx, gpe_context, - mbenc_param->gpe_context_tx->dynamic_state.bo, + mbenc_param->gpe_context_tx->curbe.bo, 0, ALIGN(res_size, 64), - mbenc_param->gpe_context_tx->curbe_offset, + mbenc_param->gpe_context_tx->curbe.offset, VP9_BTI_MBENC_TX_CURBE_G9); @@ -3684,8 +3684,6 @@ gen9_init_gpe_context_vp9(struct i965_gpe_context *gpe_context, { gpe_context->curbe.length = kernel_param->curbe_size; // in bytes - gpe_context->curbe_size = ALIGN(kernel_param->curbe_size, 64); - gpe_context->sampler_size = 0; if (kernel_param->sampler_size) { gpe_context->sampler_size = ALIGN(kernel_param->sampler_size, 64); diff --git a/src/i965_gpe_utils.c b/src/i965_gpe_utils.c index c5a8935..3739a88 100644 --- a/src/i965_gpe_utils.c +++ b/src/i965_gpe_utils.c @@ -1066,8 +1066,8 @@ gen8_gpe_curbe_load(VADriverContextP ctx, OUT_BATCH(batch, CMD_MEDIA_CURBE_LOAD | (4 - 2)); OUT_BATCH(batch, 0); - OUT_BATCH(batch, gpe_context->curbe_size); - OUT_BATCH(batch, gpe_context->curbe_offset); + OUT_BATCH(batch, gpe_context->curbe.length); + OUT_BATCH(batch, gpe_context->curbe.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_size + gpe_context->sampler_size + 192; + bo_size = gpe_context->idrt_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", @@ -1137,8 +1137,11 @@ gen8_gpe_context_init(VADriverContextP ctx, /* Constant buffer offset */ start_offset = ALIGN(end_offset, 64); - gpe_context->curbe_offset = start_offset; - end_offset = start_offset + gpe_context->curbe_size; + dri_bo_unreference(gpe_context->curbe.bo); + gpe_context->curbe.bo = bo; + dri_bo_reference(gpe_context->curbe.bo); + gpe_context->curbe.offset = start_offset; + end_offset = start_offset + gpe_context->curbe.length; /* Interface descriptor offset */ start_offset = ALIGN(end_offset, 64); @@ -1170,6 +1173,8 @@ gen8_gpe_context_destroy(struct i965_gpe_context *gpe_context) dri_bo_unreference(gpe_context->indirect_state.bo); gpe_context->indirect_state.bo = NULL; + dri_bo_unreference(gpe_context->curbe.bo); + gpe_context->curbe.bo = NULL; } @@ -1619,7 +1624,12 @@ gen8_gpe_context_set_dynamic_buffer(VADriverContextP ctx, dri_bo_reference(gpe_context->dynamic_state.bo); gpe_context->dynamic_state.bo_size = ds->bo_size; - gpe_context->curbe_offset = ds->curbe_offset; + /* curbe buffer is a part of the dynamic buffer */ + dri_bo_unreference(gpe_context->curbe.bo); + gpe_context->curbe.bo = ds->bo; + dri_bo_reference(gpe_context->curbe.bo); + gpe_context->curbe.offset = ds->curbe_offset; + gpe_context->idrt_offset = ds->idrt_offset; gpe_context->sampler_offset = ds->sampler_offset; @@ -1629,15 +1639,15 @@ gen8_gpe_context_set_dynamic_buffer(VADriverContextP ctx, void * gen8p_gpe_context_map_curbe(struct i965_gpe_context *gpe_context) { - dri_bo_map(gpe_context->dynamic_state.bo, 1); + dri_bo_map(gpe_context->curbe.bo, 1); - return (char *)gpe_context->dynamic_state.bo->virtual + gpe_context->curbe_offset; + return (char *)gpe_context->curbe.bo->virtual + gpe_context->curbe.offset; } void gen8p_gpe_context_unmap_curbe(struct i965_gpe_context *gpe_context) { - dri_bo_unmap(gpe_context->dynamic_state.bo); + dri_bo_unmap(gpe_context->curbe.bo); } void diff --git a/src/i965_gpe_utils.h b/src/i965_gpe_utils.h index 0cbef43..92123fe 100644 --- a/src/i965_gpe_utils.h +++ b/src/i965_gpe_utils.h @@ -92,6 +92,7 @@ struct i965_gpe_context struct { dri_bo *bo; unsigned int length; /* in bytes */ + unsigned int offset; } curbe; struct { @@ -168,8 +169,6 @@ struct i965_gpe_context int sampler_size; unsigned int idrt_offset; int idrt_size; - unsigned int curbe_offset; - int curbe_size; }; struct gpe_mi_flush_dw_parameter -- 1.9.1 _______________________________________________ Libva mailing list Libva@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libva