diff options
author | Xiang, Haihao <haihao.xiang@intel.com> | 2015-04-08 15:58:35 +0800 |
---|---|---|
committer | Xiang, Haihao <haihao.xiang@intel.com> | 2016-11-18 16:26:37 +0800 |
commit | f54be778f4081c05e368b69b1099c5383d0e8593 (patch) | |
tree | ed787b354e7d5bf8a36702146bf08ffb1e52962e | |
parent | 9fbaff9aea9397a4db95b118406b49b2a09400cc (diff) |
Move interface descriptor remapping table related settings to the inner structure in i965_gpe_context
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.
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Reviewed-by: Zhao Yakui <yakui.zhao@intel.com>
-rw-r--r-- | src/gen75_vpp_gpe.c | 10 | ||||
-rw-r--r-- | src/gen8_mfc.c | 7 | ||||
-rw-r--r-- | src/gen8_vme.c | 8 | ||||
-rw-r--r-- | src/gen9_post_processing.c | 3 | ||||
-rw-r--r-- | src/gen9_vme.c | 7 | ||||
-rw-r--r-- | src/gen9_vp9_encoder.c | 2 | ||||
-rw-r--r-- | src/i965_gpe_utils.c | 27 | ||||
-rw-r--r-- | 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 |